package com.lagou.task08;

import java.util.Scanner;
//边缘的判断没写，时间不太够用了 在中间是可以正常运行的 ...


public class NewChess {
    Scanner z = new Scanner(System.in);
    //声明一个数组用于棋盘绘制
    private static String[][] arr1 = new String[17][17];
    //声明两个用于记录坐标的变量
    private static int x;
    private static int y;
    //用于判断黑棋还是白棋下棋
    private static String h = "bl";
    //绘制棋盘的成员方法
    public void show(){
        //打印棋盘数组中的每个元素
        //使用外层for循环控制打印的行数
        for(int i = 0; i < arr1.length; i++){
            //使用内层for循环控制打印的列数
            for(int j = 0; j < arr1[i].length; j++){
                if(i == 0 && j == 0){
                    arr1[i][j] = " ";
                }else if(i != 0 && j != 0){
                    arr1[i][j] = "+";
                }else if(i == 0){
                    arr1[0][j] = Integer.toHexString(j - 1);
                }else if(j == 0){
                    arr1[i][0] = Integer.toHexString(i - 1);
                }
                System.out.print(arr1[i][j] + " ");
            }
            System.out.println();
        }
    }

    //提示黑棋或白棋下子
    public void blorwt(){
        NewChess nc = new NewChess();
        //声明变量用于判断胜负 0继续 1黑棋赢 2白棋赢
        int win = 0;
        for(int e = 1; e <= 256; e++){
            //h=true 表示为白棋 false表示为黑棋
            if(h.equals("wt")){
                System.out.println("请输白棋入棋子的坐标（范围需在1~16之间，例如：1 16）：");
            }else if(h.equals("bl")){
                System.out.println("请输黑棋入棋子的坐标（范围需在1~16之间，例如：1 16）：");
            }
            x = z.nextInt();
            y = z.nextInt();
            if(x > 16 || x < 1 || y > 16 || y <1){
                System.out.println("该位置超出棋盘范围，请重新下棋！");
                System.out.println("-------------------------------------------------------");
                continue;
            }
            if(h.equals("bl")){
                arr1[x][y] = "●";
            }else if(h.equals("wt")){
                arr1[x][y] = "▲";
            }
            //重新打印棋盘
            for(int q = 0; q < arr1.length; q++){
                //使用内层for循环控制打印的列数
                for(int a = 0; a < arr1[q].length; a++){
                    System.out.print(arr1[q][a] + " ");
                }
                System.out.println();
            }
            System.out.println("-------------------------------------------------------");
            win = nc.winner();
            if (win == 1) {
                if (h.equals("bl")) {
                    System.out.println("黑棋胜！");
                    System.out.println("游戏结束！");
                } else if (h.equals("wt")) {
                    System.out.println("白棋胜！");
                    System.out.println("游戏结束！");
                }
                break;
            } else if (win == 0) {
                if (h.equals("bl")) {
                    h = "wt";
                } else if (h.equals("wt")) {
                    h = "bl";
                }
            }
        }

    }

    public int winner(){
        int sum0 = 1;
        int sum1 = 1;
        int sum2 = 1;
        int sum3 = 1;
        //判断纵向
        for(int num = 1;arr1[x][y] == arr1[x + num][y];num++){
            sum0++;
        }
        for(int num = 1;arr1[x][y] == arr1[x - num][y];num++){
            sum0++;
        }
        if(sum0 >= 5){
            return 1;
        }else {
            sum0 = 1;
        }
        //判断横向
        for(int num = 1;arr1[x][y] == arr1[x][y - num];num++){
            sum1++;
        }
        for(int num = 1;arr1[x][y] == arr1[x][y + num];num++){
            sum1++;
        }
        if(sum1 >= 5){
            return 1;
        }else {
            sum1 = 1;
        }
        //判断左上到右下
        for(int num = 1;arr1[x][y] == arr1[x - num][y - num];num++){
            sum2++;
        }
        for(int num = 1;arr1[x][y] == arr1[x + num][y + num];num++){
            sum2++;
        }
        if(sum2 >= 5){
            return 1;
        }else {
            sum2 = 1;
        }
        //判断左下到右上
        for(int num = 1;arr1[x][y] == arr1[x - num][y + num];num++){
            sum3++;
        }
        for(int num = 1;arr1[x][y] == arr1[x + num][y - num];num++){
            sum3++;
        }
        if(sum3 >= 5){
            return 1;
        }else {
            sum3 = 1;
        }
        return 0;
    }

    public static void main(String[] args) {
        int yn = 0;
        NewChess nc = new NewChess();
        System.out.println("比赛开始！由黑棋先下！");
        nc.show();
        nc.blorwt();
    }
}
